package com.hengpeng.itfinoss.controller.vo;

import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang.StringUtils;


/**
 * f
 *
 */
public class CacheVo implements Serializable
{
	
	private static final long serialVersionUID = -2158957257864164368L;
	
	private String modulName;
	private String ehchaceName;
	private Long time;
	
	
	public CacheVo(String modulName, String ehchaceName, Long time)
	{
		super();
		this.modulName = modulName;
		this.ehchaceName = ehchaceName;
		this.time = time;
	}

	public String getModulName()
	{
		
		return ehchaceNameToModulName(ehchaceName);
	}

	public void setModulName(String modulName)
	{
		this.modulName = modulName;
	}

	public String getEhchaceName()
	{
		return ehchaceName;
	}

	public void setEhchaceName(String ehchaceName)
	{
		this.ehchaceName = ehchaceName;
	}

	public Long getTime()
	{
		return time;
	}

	public void setTime(Long time)
	{
		this.time = time;
	}

	/**
	 * 解析ehchaceName
	 * @param ehchaceName
	 * @return
	 */
	private String ehchaceNameToModulName(String ehchaceName)
	{

		String module = "";
		if (!StringUtils.isEmpty(ehchaceName))
		{
			String[] arrayStr = ehchaceName.split("_");

			if (null != arrayStr && arrayStr.length > 0)
			{
				List<String> list = Arrays.asList(arrayStr);
				StringBuffer sbModulel = new StringBuffer();
				for (int i = 0; i < list.size(); i++)
				{
					String strModule = getEhchaceTypeByEhchaceName(list.get(i));

					if (!StringUtils.isEmpty(strModule))
					{
						sbModulel.append(strModule);
						if (i < list.size() - 1)
						{
							sbModulel.append("=>");
						}
					}

				}
				module = sbModulel.toString();
			}

		}

		return module;
	}

	/**
	 * 通过EhchaceName 获取模块名称
	 * @param ehchaceName
	 * @return
	 */
	private String getEhchaceTypeByEhchaceName(String ehchaceName)
	{
		String returnValue = "";
		if (!StringUtils.isEmpty(ehchaceName))
		{
			for (EhchaceType e : EhchaceType.values())
			{
				if (e.name().equals(ehchaceName))
				{
					returnValue = e.getText();
					break;
				}
			}
		}
		return returnValue;
	}
	
	
	public static void main(String args[]){
		
		CacheVo  cacheVo =  new CacheVo("","commonRepeatReadableCache_issue_follow",new Long(200));
		
		System.out.println("test: "+cacheVo.getModulName());
	}
	
	
	/**
	 * 
	 *缓存类别描述
	 *这个分类有很多不确定性，如果把每个分类都以Class方式存蓄，
	 *将会创建多个Class，所以把描述放入到枚举中，以后在ehcache-custom.xml中新增缓存，
	 *必须以 命名规则 {commonRepeatReadableCache}_{类别}_{明细/方法名}其中 
	 *{类别}为大类，{明细/方法名}为自定义名称，或方法名，也分别对应以下枚举变量描述。
	 *
	 */
	public static enum EhchaceType
	{
		//奖期
		issue("奖期"),
		    current("查询当前奖期"),
			follow("查询销售和预售奖期"),
			unite("查询合买奖期"),
			issueinfo("查询奖期信息"),
			draw("查询开奖信息"),
			bygameandname("通过玩法取奖期列表 "),
			findFollowIssue("追号奖期"),
			findIssueOpenInfo("查询最新开奖"),
			findIssueComplete("查询已经完成的奖期"),
			findIssueAward("查询已经开奖的奖期"),
			findIssueBooking("查询预售期"),
			findIssuePrizeBulletin("开奖公告信息"),
		//方案
		plan("方案"),
		   autobetrecord("自动定投投注记录"),
		   planinfo("方案信息"),
		   findSimpleUnionPlans("合买查询方案信息"),
		   findUnionPlans("合买查询列表信息"),
		
		//配置  
		config("配置"),
		   host ("域名配置信息"),
		
		bonus("返奖"),
		   bystore("通过会员店取反奖信息"),
		   bymonth("通过时间取反奖信息"),
		   findNewBonusByGameId("通过玩法取反奖信息"),
		   
		
		//个人相关信息
		member("会员"),
		   vote("投票信息"),
		   voteresult("投票结果信息"),
		   memberinfo("会员信息"),
		   lotrecord("会员投注记录"),
		   getAccount("通过投注卡获取帐号信息"),
		   findMemberLotRecord("查询用户的投注记录"),
		   
		//玩法
		game("玩法"),
		   omitbygameid("通过ID获取遗漏信息"),
		   bystoreid("通过会员店获取信息"),
		   bygameid("通过ID获取玩法信息"),
		   clientbygameid("通过ID获取前端玩法"),
		   clientbystoreid("通过会员店获取前端玩法"),
		   all("获取所有玩法"),
		   
		//资讯
		article("资讯"),
		   articleAll("所有资讯"),
		
		//投注
		play("投注"),
		   findPlayTypeAll("获取所有投注信息"),
		//打票终端
		print("打票终端"),
		   printbygameid("通过玩法获取打票"),
		   getCachedCounter("通过终端ID获取终端信息"),
		   getCachedPrintGame("打票终端玩法对应关系"),
		
		//合买分组
		unitegroup("合买分组"),
		   unitegroupbystoreid("通过玩法获取合买分组");

		private String text;

		EhchaceType(String text)
		{
			this.text = text;
		}

		public String getText()
		{
			return text;
		}

		public void setText(String text)
		{
			this.text = text;
		}
	}
	
	
	
}
